package array;

/**
 * 二分查找法
 */
public class MyBinarySearchDemo {
    public static void main(String[] args) {
        // 二分查找法
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
        int number = 5;
        int index = binarySearchForIndex(arr, number);
        System.out.println(index);
    }

    /**
     * 二分查找
     *
     * @param arr    数组
     * @param number 查找的元素
     * @return 查找到的索引，没有找到返回-1
     */
    private static int binarySearchForIndex(int[] arr, int number) {
        // 1.定义查找范围
        int min = 0;
        int max = arr.length - 1;
        // 2.循环查找 min <= max
        while (min <= max) {
            // 3.计算中间位置 mid
            int mid = (max + min) >> 1;  // >> 1 表示右移一位，等同于除2
            // mid指向的元素 > number
            if (arr[mid] > number) {
                // 表示要查找的元素在左边
                max = mid - 1;
            } else if (arr[mid] < number) {
                // 表示要查找的元素在右边
                min = mid + 1;
            } else {
                // mid指向的元素 == number
                return mid;
            }
            // mid指向的元素 < number
            // mid指向的元素 == number
        }
        // 如果min大于了max就表示元素不存在，返回-1
        return -1;
    }
}
